Text-Processing
根據其他列的值過濾列
我有一個包含兩列和超過 3,00,000 行的文本文件。格式如下
Filename1.txt Num1 Filename2.txt Num2 Filename3.txt Num3
我想將對應
Numx
大於 50 且小於 200 的所有文件名複製到不同的文件中。一旦我將這些文件名複製到不同的文件中,我想將所有這些文件複製到不同的文件夾中。
我怎麼做?
如果您願意,可以同時進行比較和複製
awk
:awk '$2>50 && $2<200 {system("cp -- "$1" /path/to/destination/")}' file.txt
假設您要將文件複製到
destination
目錄,請更改它以滿足您的需要。
$2>50 && $2<200
進行所需的比較- 如果匹配,則
cp
執行操作 ({system("cp -- "$1" /path/to/destination/")}
),由以下system()
函式完成awk
讓我們考慮這個測試文件:
$ cat file Filename1.txt 49 Filename2.txt 72 Filename3.txt 189 Filename4.txt 203
要僅選擇第二列大於或等於 50 且小於或等於 200 的文件:
$ awk '$2>=50 && $2<=200 { print $1}' file Filename2.txt Filename3.txt
要將這些文件名放在某個路徑的新文件中:
awk '$2>=50 && $2<=200 { print $1}' file >/path/to/newfile
複製選定的文件
假設數字是整數,請嘗試:
while read fname num; do [ "$num" -ge 50 ] && [ "$num" -le 200 ] && cp -- "$fname" /some/path/ ; done <file
或者,對於那些喜歡將程式碼分佈在多行中的人:
while read fname num do [ "$num" -ge 50 ] && [ "$num" -le 200 ] && cp -- "$fname" /some/path/ done <file