awk 遇到问题

发布于 2024-12-09 00:18:15 字数 181 浏览 1 评论 0原文

我正在尝试将变量分配给 awk 语句。我收到错误。这是代码:

for i in `checksums.txt` do
md=`echo $i|awk -F'|' '{print $1}'`
file=`echo $i|awk -F'|' '{print $2}'`
done

谢谢

I am trying to assign a variable to an awk statement. I am getting an error. Here is the code:

for i in `checksums.txt` do
md=`echo $i|awk -F'|' '{print $1}'`
file=`echo $i|awk -F'|' '{print $2}'`
done

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

紅太極 2024-12-16 00:18:15
for i in `checksums.txt` do

这将尝试执行 checksums.txt,这很可能不是您想要的。如果您想要该文件的内容,请执行以下操作:(

for i in $(<checksums.txt) ; do
  md=$(echo $i|awk -F'|' '{print $1}')
  file=$(echo $i|awk -F'|' '{print $2}')
  # ...
done

这不是最佳选择,如果文件中包含空格行,则不会执行您想要的操作,但至少它应该可以帮助您开始。)

for i in `checksums.txt` do

This will try to execute checksums.txt, which is very probably not what you want. If you want the contents of that file do:

for i in $(<checksums.txt) ; do
  md=$(echo $i|awk -F'|' '{print $1}')
  file=$(echo $i|awk -F'|' '{print $2}')
  # ...
done

(This is not optimal, and will not do what you want if the file has lines with spaces in them, but at least it should get you started.)

不知所踪 2024-12-16 00:18:15

您不需要为此使用外部程序:

while IFS=\| read m f; do
  printf 'md is %s, filename is %s\n' "$m" "$f"
done < checksums.txt 

根据新要求进行编辑。
鉴于文件已经排序,您可以使用 uniq (假设 GNU uniq 和 md 哈希长度为 33 个字符):

uniq -Dw33  checksums.txt

如果 GNU uniq 不是可用,您可以使用 awk
(此版本不需要排序输入):

awk 'END {
  for (M in m)
    if (m[M] > 1) 
      print M, "==>", f[M]  
  }
{ 
  m[$1]++
  f[$1] = f[$1] ? f[$1] FS $2 : $2
  }' checksums.txt 

You don't need external programs for this:

while IFS=\| read m f; do
  printf 'md is %s, filename is %s\n' "$m" "$f"
done < checksums.txt 

Edited as per new requirement.
Given the file is already sorted, you could use uniq (assuming GNU uniq and md hash length of 33 characters):

uniq -Dw33  checksums.txt

If GNU uniq is not available, you can use awk
(this version doesn't require a sorted input):

awk 'END {
  for (M in m)
    if (m[M] > 1) 
      print M, "==>", f[M]  
  }
{ 
  m[$1]++
  f[$1] = f[$1] ? f[$1] FS $2 : $2
  }' checksums.txt 
只涨不跌 2024-12-16 00:18:15
while read line
do
  set -- `echo $line | tr '|' ' '`
  echo md is $1, file is $2
done < checksums.txt
while read line
do
  set -- `echo $line | tr '|' ' '`
  echo md is $1, file is $2
done < checksums.txt
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文