2011-10-10 112 views
0

我想將一個變量賦值給awk語句。我收到一個錯誤。下面是代碼:awk遇到問題

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

感謝

+0

這將有助於如果您將顯示checksums.txt文件的實際內容的外觀LIK即我假設它是'MD | FILE',但假設已經被證明在這裏錯了很多次.. – Anders

回答

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 

(這不是最佳的,你想要什麼,如果該文件有空格的行不行,但至少應該讓你開始。)

+0

它似乎並沒有工作。循環中的代碼永遠不會運行 –

+0

你怎麼知道?現在,代碼不會打印任何內容。你沒有指定你有什麼錯誤,所以我一無所知,除了你試圖執行一個文本文件的更明顯的問題。 – Mat

+0

之後,我試圖迴應MD和文件,沒有出來導致我相信,循環是從來沒有進入。也許我錯過了一些東西。 –

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

你不需要外部程序此:

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