我有一個由數字組成的文件。通常,每行包含一個單一的數字。我想要統計文件中以數字「0」開頭的行數。如果是這樣的話,那麼我想做一些後期處理。將命令的輸出分配給shell變量並獲取變量大小
雖然我能夠正確檢索相應的行號,但檢索行的總數不正確。下面,我發佈我正在使用的代碼。
linesToRemove=$(awk '/^0/ { print NR; }' ${inputFile});
# linesToRemove=$(grep -n "^0" ${inputFile} | cut -d":" -f1);
linesNr=${#linesToRemove} # <- here, the error
# linesNr=${#linesToRemove[@]} # <- here, the error
if [ "${linesNr}" -gt "0" ]; then
# do something here, e.g. remove corresponding lines.
awk -v n=$linesToRemove 'NR == n {next} {print}' ${anotherFile} > ${outputFile}
fi
另外,至於基於awk的命令,我怎樣才能使用shell變量?我嘗試了下面的命令,但它不能正常工作,因爲'myIndex'被解釋爲文本而不是變量。
linesToRemove=$(awk -v myIndex="$myIndex" '/^myIndex/ { print NR;}' ${inputFile});
考慮開始與${inputFile}
發現0
行號,我想從${anotherFile}
刪除相應的行號。兩個$ {INPUTFILE} $ {anotherFile}下面給出一個例子,:
// ${inputFile}
0
1
3
0
// ${anotherFile}
2.617300e+01 5.886700e+01 -1.894697e-01 1.251225e+02
5.707397e+01 2.214040e+02 8.607959e-02 1.229114e+02
1.725900e+01 1.734360e+02 -1.298053e-01 1.250318e+02
2.177940e+01 1.249531e+02 1.538853e-01 1.527150e+02
// ${outputFile}
5.707397e+01 2.214040e+02 8.607959e-02 1.229114e+02
1.725900e+01 1.734360e+02 -1.298053e-01 1.250318e+02
在上面的例子中,我需要刪除線0
和從${anotherFile}
3
,因爲這些行對應於開頭的行0
in ${inputFile}
。
@ ghosdog74,謝謝!實際上,最終目標是從一個文件中檢索以0開頭的行,然後從另一個文件中刪除相應的行。此外,是否有可能使用變量'linesToRemove'的大小/長度來查找總行數? – Javier 2011-04-27 12:38:10
@Javier,你應該發佈這些文件的樣本,並顯示你的最終輸出。我可以更好地向你展示,如果不是比你現在正在做的更有效的方式 – ghostdog74 2011-04-27 12:45:58
@ ghosdog74,我更新了這篇文章,幷包含了這兩個文件的一些示例。 – Javier 2011-04-27 12:56:32