我運行./command script.sh 11
的腳本,下面的代碼的第一行將輸出(321)成功地存儲在參數x中(在第2行中使用echo檢查)。在第3行,我嘗試使用參數x檢索第一列中的值等於x(在doc2.csv中)的所有行上的最後兩列。這將無法正常工作,但是當我用z=321
替換z=$x
時,它工作正常。爲什麼傳遞參數時這個代碼不工作?在awk命令中傳遞一個參數將不起作用
#!/bin/bash
x="$(awk -v y=$1 -F\; '$1 == y' ~/Documents/doc1.csv | cut -d ';' -f2)"
echo $x
awk -v z=$x -F, '$1 == z' ~/Documents/doc2.csv | cut -d ',' -f2,3
doc1.csv(所有列具有唯一值)
33;987
22;654
11;321
...
doc2.csv
321,156843,ABCD
321,637253,HYEB
123,256843,BHJN
412,486522,HDBC
412,257843,BHJN
862,256843,BHLN
...
你爲什麼使用'cut'?在'awk'中輸出你想要的列:''$ 1 == y {print $ 2}''。 – chepner
您的任一個CSV文件是否使用DOS行尾? – chepner
你在第一個文件的每行末尾幾乎肯定會有一些空格,所以'x'不是'321'它的'321',而@chepner說這很可能是control-Ms,所以運行dos2unix或者首先在文件上類似。另外,當你使用awk時,你永遠不需要cut,grep或sed或其他任何小工具。閱讀由Arnold Robbins撰寫的有效Awk編程,第4版。 –