我正在尝试将变量分配给awk语句。我收到了一个错误。这是代码:
for i in `checksums.txt` do
md=`echo $i|awk -F'|' '{print $1}'`
file=`echo $i|awk -F'|' '{print $2}'`
done
由于
答案 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