我嘗試過使用cat /home/kgh/abc.CSV | awk -F, '$2 ~ /^[[:digit:]]+$/'
。它在列級檢查條件。使用sed/grep從csv文件中刪除所有非整數行
cat /home/kgh/abc.CSV
1,010116085134,125,125,124,123, 000,00,232,28,294522,077,041755,0074,0013
1,010116085139,125,125,124,123,-012,00,232,28,294522,077,041755,0074,0013
1,010116085144,125,125,124,123, 000,00,232,28,294522,077\82,041755,0074,0013
1,010116085149,125,125,124,123,^@000,00,232,28,294522,088,041755,0074,0013
2,010116084424,15954,15593,14034
2,010116084616,15651,15366,12804
預期的O/P
1,010116085134,125,125,124,123, 000,00,232,28,294522,077,041755,0074,0013
1,010116085139,125,125,124,123,-012,00,232,28,294522,077,041755,0074,0013
2,010116084424,15954,15593,14034
2,010116084616,15651,15366,12804
我不能夠在行級檢查作爲cat /home/kgh/abc.CSV | awk -F, '$0 ~ /^[[:digit:]]+$/'
。我不能把這個條件放在其他列上,因爲它在每一行中包含不同數量的列。我只想檢查我的csv文件中的數字數據,否則我想從我的csv文件中刪除該行。是否有任何有效的方法來做到這一點?謝謝。
編輯
我擔心,爲什麼下面提及的解決方案沒有與sed
工作和grep
太
[email protected]:/home/kgh/# cat abc.CSV
1,010116084135,118,115,113,115,-368,09,225,28,294579,077,044677,0074,0013
1,010116084146,000,000,000,000,000,09,227,28,294536,077,044271,0074,0013
1,010116084151,122,121,118,119,-099,05,228,28,294547,077,044150,0074,0013
1,010116084156,121,117,117,116,-244,^@06,228,28,294557,077,044047,0074,0013
[email protected]:/home/kgh# sed -n '/^[0-9, -]*$/p' abc.CSV
[email protected]:/home/kgh# sed -rn '/^-?[0-9]+(, ?-?[0-9]+)*$/p' abc.CSV
[email protected]:/home/kgh# grep -v '[^0-9, -]' abc.CSV
我缺少什麼?
被修改
file abc.CSV
abc.CSV: ASCII text, with CRLF line terminators
我打開的文件,以查看在vi CRLF行終止使用:set list
1,010116084135,118,115,113,115,-368,09,225,28,294579,077,044677,0074,0013$
1,010116084146,000,000,000,000,000,09,227,28,294536,077,044271,0074,0013$
1,010116084151,122,121,118,119,-099,05,228,28,294547,077,044150,0074,0013$
1,010116084156,121,117,117,116,-244,^@06,228,28,294557,077,044047,0074,0013$
因此使用sed或grep的任何結果。
我已經刪除了CRLF行終止符,現在它使用grep和sed。
sed 's/'"$(printf '\015')"'//g' abc.CSV | sed '/[^0-9, -]/d'
1,010116084135,118,115,113,115,-368,09,225,28,294579,077,044677,0074,0013
1,010116084146,000,000,000,000,000,09,227,28,294536,077,044271,0074,0013
1,010116084151,122,121,118,119,-099,05,228,28,294547,077,044150,0074,0013
我猜你的CSV文件有DOS行結束符。使用'dos2unix'(或許多其他選項之一;谷歌周圍)並再試一次,或者更新你的正則表達式以允許這個外星人角色。除非您正在尋求驗證例如,否則應該只需要簡單的'grep'。列數,或者除去無效數字,如1.2.3或0--0。 – tripleee
非常感謝您爲此突出顯示:) – Aashu
您是否仍然有問題,或者您是否可以接受提議的解決方案之一,以便這個問題不再出現未解決的問題?謝謝。 – tripleee