我想將一個變量賦值給awk語句。我收到一個錯誤。下面是代碼:awk遇到問題
for i in `checksums.txt` do
md=`echo $i|awk -F'|' '{print $1}'`
file=`echo $i|awk -F'|' '{print $2}'`
done
感謝
我想將一個變量賦值給awk語句。我收到一個錯誤。下面是代碼:awk遇到問題
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
這將嘗試執行checksums.txt
,這是很可能不是你想要什麼。如果你想要的文件的內容做:
for i in $(<checksums.txt) ; do
md=$(echo $i|awk -F'|' '{print $1}')
file=$(echo $i|awk -F'|' '{print $2}')
# ...
done
(這不是最佳的,你想要什麼,如果該文件有空格的行不行,但至少應該讓你開始。)
它似乎並沒有工作。循環中的代碼永遠不會運行 –
你怎麼知道?現在,代碼不會打印任何內容。你沒有指定你有什麼錯誤,所以我一無所知,除了你試圖執行一個文本文件的更明顯的問題。 – Mat
之後,我試圖迴應MD和文件,沒有出來導致我相信,循環是從來沒有進入。也許我錯過了一些東西。 –
while read line
do
set -- `echo $line | tr '|' ' '`
echo md is $1, file is $2
done < checksums.txt
你不需要外部程序此:
while IFS=\| read m f; do
printf 'md is %s, filename is %s\n' "$m" "$f"
done < checksums.txt
編輯按新的要求。 指定的文件已經排序,你可以使用的uniq(假設GNU uniq的和33個字符MD散列長度):
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
這將有助於如果您將顯示checksums.txt文件的實際內容的外觀LIK即我假設它是'MD | FILE',但假設已經被證明在這裏錯了很多次.. – Anders