我有一個非常大的文件(2.5M記錄),其中2列與|分開。 我想篩選第二列中不包含值「-1」的所有記錄,並將其寫入新文件。有條件的Linux awk
我試着使用:
grep -v "-1" norm_cats_21_07_assignments.psv > norm_cats_21_07_assignments.psv
但野應運氣。
我有一個非常大的文件(2.5M記錄),其中2列與|分開。 我想篩選第二列中不包含值「-1」的所有記錄,並將其寫入新文件。有條件的Linux awk
我試着使用:
grep -v "-1" norm_cats_21_07_assignments.psv > norm_cats_21_07_assignments.psv
但野應運氣。
你可以通過AWK做到這一點,
awk -F"|" '$2~/^-1$/{next}1' file > newfile
例子:
$ cat r
foo|-1
foo|bar
$ awk -F"|" '$2~/^-1$/{next}1' r
foo|bar
'/ -1 /'也會碰到'-10'' -12123'等等,你需要'$ 2〜/^- 1 $ /'或'$ 2 ==「 - 1」' – Jotne
您可以:
awk -F'|' '$2 != "-1"' file.psv > new_file.psv
或者
awk -F'|' '$2 !~ /-1/' file.psv > new_file.psv
!=
整列相匹配,而!~
需求只是其中的一部分。編輯:只是注意到你的輸入文件和輸出文件是相同的。你不能這樣做,因爲即使在awk
開始讀取文件之前,相同文件的輸出文件也會被截斷。
使用awk
製作新的過濾文件(例如new_file.psv
)後,可以使用cat new_file.psv > file.psv
或mv new_file.psv file.psv
將其保存回來。
但不知何故,如果你到底有沒有與周圍隔開|
2列之間沒有空格,不包括引號,等等。你可以只使用與sed
內聯編輯:
sed -i '/|-1/d' file.psv
也許東西相當於awk -F'|' '$2 !~ /-1/'
:
sed -i '/|.*-1/d' file.psv
我試過awk -F「|」 '$ 2!=「 - 1」'norm_cats_21_07.psv> norm_cats_21_07_assignments.psv,但它似乎不起作用 – user3628777
@ user3628777你能從文件中顯示一些行嗎?另外,確保你的文件是UNIX格式的:'sed -i's | \ r ||' your_file' – konsolebox
我的錯誤 - 分隔符錯誤。在將「分隔符」修改爲「|」之後到「」它的工作 – user3628777
爲了快速和骯髒的解決方案,你可以簡單地添加|
到您的grep:
grep -v "|-1" input.psv > output.psv
這是假定行被忽略的樣子
something|-1
請注意,如果您需要使用grep -v "-1"
,你有選擇後添加--
,否則的grep將把-1
作爲一個選項,是這樣的:
grep -v -- "-1"
提示:'awk的-F 「|」 '{print $ 2}'返回第二列.. – Maroun