Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Unix脚本中每个单元格的大小_Unix_Awk_Scripting_String Length - Fatal编程技术网

比较Unix脚本中每个单元格的大小

比较Unix脚本中每个单元格的大小,unix,awk,scripting,string-length,Unix,Awk,Scripting,String Length,我想比较每个单元格的大小/长度,并根据其长度更改其内容 当前表格的格式为 AB CD AB AB CD 155668/01 AB 1233/10 我想更换长度超过“2”的电池 输出 AB CD AB AB CD DE AB DE 我试过了 awk -F "," '{ if($(#1) > "2") {print "DE"} else {print $1 }}' 它说的是语法错误。 如果我使用wc-m,如果$(#输出与输入相同。最简单的方法是使用sed: sed '/^..$/!s/.

我想比较每个单元格的大小/长度,并根据其长度更改其内容

当前表格的格式为

AB
CD
AB
AB
CD
155668/01
AB
1233/10
我想更换长度超过“2”的电池

输出

AB
CD
AB
AB
CD
DE
AB
DE
我试过了

awk -F "," '{ if($(#1) > "2") {print "DE"} else {print $1 }}'
它说的是语法错误。
如果我使用
wc-m
,如果
$(#
输出与输入相同。

最简单的方法是使用
sed

sed '/^..$/!s/.*/DE/' file
在awk中,您可以说:

awk '!/^..$/ { $0 = "DE" } 1' file
在这两种情况下,想法都是一样的:如果一行不完全由两个字符组成,则将整行替换为
DE
。在
sed
的情况下,整行是
*
,在
awk
的情况下,整行是
$0
试试这个-

$ awk '{print (length($1)>2?"DE":$1)}' f
AB
CD
AB
AB
CD
DE
AB
DE

惯用的方法是:

awk 'length($1) > 2 { $1 = "DE" } 1'

两个都很好。谢谢。你能解释一下代码吗?你的意思是分配给
$1
?@MichaelVehrs:是的,谢谢。下次编辑:-)