Shell-Script
與多個 csv 文件的 grep 命令循環相關的問題
我製作了一個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。
進一步提示:
- 您的
for
-loops 可以合併為一個- 關鍵字可以成為
for
-loop 並與文件循環嵌套- 首先創建目錄並直接將輸出重定向到那里以跳過
mv