我有一个6列制表符分隔的.txt文件;第6列通常可以包含空字符串:
1 ARS 10 36 . TTT
1 ARS 10 36 - TTT
1 ARS 10 36 - TTT
1 ARS 10 36 - TTT
1 ARS 10 36 - TTT
1 ARS 10 36 + TTT
1 ARS 10 36 + TTT
1 ARS 10 36 + TTT
1 ARS 10 36 + TTT
1 ARS 10 36 + TTT
1 ARS 10 36 + TTT
1 ARS 10 36 . TTT
1 ARS 10 36 - TTT ARGF10
1 ARS 10 36 - TTT
只要$ F [6]为空,我希望插入“DUB”:
1 ARS 10 36 . TTT DUB
1 ARS 10 36 - TTT DUB
1 ARS 10 36 - TTT DUB
1 ARS 10 36 - TTT DUB
1 ARS 10 36 - TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 . TTT DUB
1 ARS 10 36 - TTT ARGF10
1 ARS 10 36 - TTT DUB
我尝试使用if
和else
:
perl -lane '($dub) = "DUB", print "$F[0]\t$F[1]\t$F[2]\t$F[3]\t$F[4]\t$F[5]\t$dub\n" if $F[6] =~ "" else print "$F[0]\t$F[1]\t$F[2]\t$F[3]\t$F[4]\t$F[5]\t$F[6]\n"'
然而,这会返回错误:
syntax error at -e line 1, near """ else"
Execution of -e aborted due to compilation errors.
为什么会这样?我也不确定如何匹配空字符串。
其次,有没有更好的方法在1行内进行有条件的“查找和替换”操作?例如,如果$ F [6]为空,则将$ F [2]的内容替换为“X”。
修改:
有没有办法让这个替换有条件?例如只有当第5列='+'时才会这样做:
1 ARS 10 36 . TTT
1 ARS 10 36 - TTT
1 ARS 10 36 - TTT
1 ARS 10 36 - TTT
1 ARS 10 36 - TTT
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 + TTT DUB
1 ARS 10 36 . TTT
1 ARS 10 36 - TTT ARGF10
1 ARS 10 36 - TTT
答案 0 :(得分:2)
试试这个(根据需要添加字段分隔符):
perl -lane '$_.="DUB" unless($F[6]);print'
修改强>
perl -lane '$_.="DUB" unless $F[6] || $F[4] ne "+";print'
我会说这是为了避免将来混淆:
perl -lane '$_.="DUB" if (!$F[6] and $F[4] eq "+");print'
答案 1 :(得分:1)
perl -lane'
BEGIN { $, = "\t" }
push @F, "DUB" if @F <6 and $F[4] eq "+";
print @F;
'
将在打印时在列表元素之间添加tab char,
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?u=$1
RewriteRule ^([a-zA-Z0-9_-]+)/user/$ user.php?u=$1
答案 2 :(得分:0)
perl -lane 'print join "\t", @F[0..5], $F[6] ? $F[6] : $f[5] eq "+" ? "DUB" : ""' input.txt