2
我在包含多個記錄的特定目錄中有100個文件,其中字段用逗號分隔。Linux:在一行中移動具有超過100個逗號的文件
我需要使用Linux命令來檢查每個文件 中的行,並且如果該行包含超過100個逗號,請將其移至另一個目錄。
可能嗎?
我在包含多個記錄的特定目錄中有100個文件,其中字段用逗號分隔。Linux:在一行中移動具有超過100個逗號的文件
我需要使用Linux命令來檢查每個文件 中的行,並且如果該行包含超過100個逗號,請將其移至另一個目錄。
可能嗎?
更新回答
雖然下面我原來的答覆是功能性的,在評論格倫(@glennjackman)的建議是更爲簡潔,地道,雄辯和最好 - 如下:
#!/bin/bash
mkdir subdir
for f in file*; do
awk -F, 'NF>100{exit 1}' "$f" || mv "$f" subdir
done
它基本上依賴於awk
的退出狀態,一般爲0
,然後在遇到需要移動的文件時只設置爲1
。
原來的答案
這會告訴你,如果一個文件有任何一行100餘個逗號:
awk -F, 'NF>100{print 1;exit} END{print 0}' someFile
它將打印1
和退出而不解析,如果該文件的剩餘部分文件具有超過100的任何行,並且如果沒有,則在末尾打印0
。
如果你想將它們移動爲好,使用
#!/bin/bash
mkdir subdir
for f in file*; do
if [[ $(awk -F, 'NF>100{print 1;exit}END{print 0}' "$f") != "0" ]]; then
echo mv "$f" subdir
fi
done
試試這個,看看它是否選擇正確的文件,並且,如果你喜歡它,刪除單詞echo
並再次運行它,所以它實際上移動它們。先備份!
我可以移動此文件而不是打印1 –
我建議使用打印命令的退出值。然後:'awk'NF> 100 {exit 1}'「$ f」|| mv ...' –
@glennjackman很好的建議,謝謝。我已經將其作爲答案。 –