遇到awk问题

时间:2011-10-10 18:48:32

标签: bash unix

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

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

由于

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您不需要外部程序:

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 

答案 2 :(得分:0)

while read line
do
  set -- `echo $line | tr '|' ' '`
  echo md is $1, file is $2
done < checksums.txt