首先,我很抱歉没有给出我尝试过的示例,因为我真的不知道从哪里开始。据我所知,这是SED或AWK的工作。
在以下情况下,我想删除行
:示例输入
John Smith|Chicago|IL
J Smith|Chicago|IL
Jane Brown|New York|NY
Jane B|New York|NY
预期产量
John Smith|Chicago|IL
Jane Brown|New York|NY
文件是|分隔,其中一些包含4列数据,另一些包含5列或更多列(我知道这是错误的格式,但这是我试图帮助他们的由NGO收集的数据),但在每种情况下,我都希望这样文件的第一列。
答案 0 :(得分:3)
我只是将您的两个条件转换为regexp,然后将grep
与选项-v
一起使用以删除这些模式
第二个字符是第一列中的空格-> ^[^|]
倒数第二个字符是第一列中的空格-> ^[^|]* [^|]\|
grep -Ev '(^[^|] )|(^[^|]* [^|]\|)' <input>
结果:
John Smith|Chicago|IL
Jane Brown|New York|NY
答案 1 :(得分:2)
此awk
应该这样做:
awk -F\| '{s=split($1,a,"")} !(a[2]==" " || a[s-1]==" ")' file
John Smith|Chicago|IL
Jane Brown|New York|NY
它将第一个字段inn拆分为数组a
和长度为s
。然后测试第二个和倒数第二个是否为空。
易于阅读,易于理解:)
答案 2 :(得分:2)
$ awk -F'|' '$1 !~ /^. | .$/' file
John Smith|Chicago|IL
Jane Brown|New York|NY
答案 3 :(得分:1)
请您尝试以下。
awk 'BEGIN{FS=OFS="|"} substr($1,2,1)==" " || substr($1,length($1)-1,1)==" "{next} 1' Input_file
答案 4 :(得分:1)
“ Corentin Limier”答案的较小版本
grep -Ev '(^. )|(^* .\|)' filename
结果:
John Smith|Chicago|IL
Jane Brown|New York|NY
使用“ sed”命令也可能实现
sed '/^. /d' filename | sed '/ .|/d'