[英]Sed, awk or perl to filter incomplete data column
自然語言處理的新手。 我有包含約一百萬行的csv文件。 我想過濾掉不包含任何數據的第三行。 例如
user1,user2, it really is
user3,user4, oh nothin
user5,user9,
user7,user8,
user9,user10,
user11,user12, i know im in
user13,user14,
user15,user16,
user17,user18, i think that might
user19,user20, what u
user21,user22, hmmm you never know
user23,user24, nicee
預期產量
user1,user2, it really is
user3,user4, oh nothin
user11,user12, i know im in
user17,user18, i think that might
user19,user20, what u
user21,user22, hmmm you never know
user23,user24, nicee
我努力了
awk -F',+' 'NF == 3' file > file
但是,不起作用
您可以使用以下awk:
awk -F ',[[:blank:]]*' '$NF!=""' file
user1,user2, it really is
user3,user4, oh nothin
user11,user12, i know im in
user17,user18, i think that might
user19,user20, what u
user21,user22, hmmm you never know
user23,user24, nicee
'$NF'!=""
實際上是檢查是否填充了第三個字段的條件。
PS:您不能真正做到:
awk -F ',[[:blank:]]*' '$NF!=""' file > file
由於輸入文件和重定向文件相同,因此最終將得到0字節文件。
更好的是:
awk -F ',[[:blank:]]*' '$NF!=""' file > file.out && mv file.out file
在Perl中,這會打印一行,除非它以逗號和空格結尾。
perl -ne'/,\s*$/ or print' file
輸出
user1,user2, it really is
user3,user4, oh nothin
user11,user12, i know im in
user17,user18, i think that might
user19,user20, what u
user21,user22, hmmm you never know
user23,user24, nicee
您沒有說是否反對使用vim,但是可以將文件加載到vim中,然后執行以下操作:
:g/,\s\+$/d
:g是vim的全局變量(對整個文件進行操作)
語法是:g / pattern / command
正斜杠之間是正則表達式模式。 在這里,我們尋找一個逗號,后面跟着我們可以找到的最大空格(\\ s +),直到我們到達行尾($)。
當正則表達式匹配時,命令“ d”表示“刪除行”。
最后:
:wq
寫入文件(w)並退出(q)。
您輸入的每行有3個字段(因為總有2逗號),所以NF總是3.你要測試的$ NF是空的內容,NF的不是值為3,另外,不要做cmd file > file
的任何命令外殼可以做> file
的前部分cmd file
的一部分,因此扎普你的輸入文件之前,它已經被讀取cmd
。
你需要:
awk -F', *' '$NF!=""' file > tmp && mv tmp file
順便說一句,這個問題/示例與自然語言處理完全無關。
這不是那么優雅,但是也許更清晰,更容易修改字段編號:
#!/usr/bin/perl
open IN,$ARGV[0];
while(<IN>){
@line = split(",",$_);
if($line[2] =~ /\S/){
print;
}
}
$ ARGV [0]是表中文件的名稱; \\ S表示字段#2(字段從0開始編號)中的任何字符(非空白)。
這是我有意選擇的一個Perl
答案,以演示-a
autosplit和-F
字段定界符選項的用法:
perl -anF, -e 'print if $F[2] =~ /\S/' file > file.out
但是在這種特殊情況下,我可能更喜歡grep
:
grep -E -v ',\s*$' file > file.out
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.