Shell-Script

與多個 csv 文件的 grep 命令循環相關的問題

  • January 7, 2021

我製作了一個for循環腳本,如下所示,

for file in *.csv
do
grep raxA $file > new_${file}
done && 
mkdir raxA && mv new_* raxA &&
for file in *.csv
do
grep raxB $file > new_${file}
done && 
mkdir raxB && mv new_* raxB &&
for file in *.csv
do
grep raxC $file > new_${file}
done && 
mkdir raxC && mv new_* raxC

當在csv文件中找到所有關鍵字時,此腳本有效,但當csv文件中缺少任何一個關鍵字時,它會失敗。當grep指定的關鍵字在 csv 文件中失去時,您能否幫我完成這項工作。先感謝您。

聽起來你想要這樣的東西:

mkdir -p raxA raxB raxC &&
 awk '
   /raxA/ {print > ("raxA/new_"FILENAME)}
   /raxB/ {print > ("raxB/new_"FILENAME)}
   /raxC/ {print > ("raxC/new_"FILENAME)}' ./*.csv

您的問題是將命令與命令後的 AND ( &&) 運算符連接起來grep。注意退出狀態grep

來自man grep

退出狀態

通常,如果選擇了一行,則退出狀態為 0,如果未選擇任何行,則退出狀態為 1,如果發生錯誤,則退出狀態為 2。

退出狀態為 1 時,不執行以下命令。看man bash

命令1 && 命令2

當且僅當 command1 返回退出狀態為零(成功)時,才會執行 command2。

進一步提示:

  1. 您的for-loops 可以合併為一個
  2. 關鍵字可以成為for-loop 並與文件循環嵌套
  3. 首先創建目錄並直接將輸出重定向到那里以跳過mv

引用自:https://unix.stackexchange.com/questions/628010