awk中調用系統命令批量處理

工作中經常遇到在輸入一堆文件名的條件下,將其移動或者刪除或者複製。由於輸入是個文件名的集合,而不是單個文件,因此不能直接用cp或者mv命令,可以通過awk的逐行處理的功能來處理這種情況。以下是一個例子:

$ grep -r 'TE' * | cut -d " " -f3 | awk '{system("mv "$1" ./English_mlfs/")}'

1. grep,在當前文件夾內的文件中查找含有TE這兩個字符的文件。注意,如果系統認爲文件是文本文件,就會同時顯示文件名和含有TE的那一行,如果認爲是binary文件,就會只顯示文件名,表示在某個文件中找到了。

2. grep的輸出結果是以空格隔開的,其中文件名在第三列,所以用cut來獲取文件名列表

3. 在awk中調用bash命令的方法很簡單,就使用system()函數,輸入爲要執行的命令的字符串。$1表示第一列的數據,也就是文件名。


以後可以用awk和調用系統命令的方法來批量處理文件咯!這樣就可以省掉很多手工操作,也不用麻煩的去寫腳本文件來處理這種簡單又經常遇到的任務了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章