【发布时间】:2019-12-24 16:00:23
【问题描述】:
我有一个下面的示例
a12,b12122,c12,d12
a13,887988,c13,d13
a14,b14121,c79,d13
我只想将 79 更改为 hh,前提是进入第 2 列。
当我这样做时
awk -F, '$2~"79"' myfile | sed 's/79/hh/g' > temp && mv temp myfile
它给了我第二排,第一排和第三排消失了。
我应该在我的代码中替换什么,所以它只替换值 887988 中的 79 到hh
我在其他论坛上查看它可以完成类似下面的代码,但我想我正在做一些代码错误
$ awk '{gsub("79","hh",$2)}1' myfile
a12,b112122,c12,d12
a13,887988,c13,d13
a14,b14121,c79,d13
[编辑] 感谢以下工作
awk -F, 'BEGIN { OFS = FS } $2 ~ /79/ { sub(/79/, "hh", $2) }1' file
但是当我尝试在新示例中删除逗号时...
我的样本是
cat > myfile
"a12","b112122","c12,d12"
a13,887988,c13,d13
a14,b14121,c79,d13
当我尝试通过
从第 2 列中删除 "awk -F, 'BEGIN { OFS = FS } $2 ~ /"/ { sub(/"/, "", $2) }1' myfile
"a12",b112122","c12,d12"
a13,887988,c13,d13
a14,b14121,c79,d13
它只删除了 1 个逗号,而不是 b112122 我得到的是 b112122"
我做错了什么?
我有我的代码的第 2 部分。
我如何才能仅在列 2 中 grep 以 b1 开头且长度必须为 的那些>6
如果我这样做了
cat myfile | grep -x '.\{6\}' | grep "^[b1]"
它给了我一个空白的结果。
什么是 awk(比如 $2 ~ /b1/ )只有那些以 b1 开头并且长度为 6 的人
【问题讨论】:
-
如果
$2=="797979"中的值,替换所有实例怎么办?此外,2019 年有很多88和hh(+1)... -
@JamesBrown 它是一个示例数据,我非常了解的实际文件,我只是了解我将如何做到这一点的路径...... :))
-
@WDC:一般不推荐扩展问题,需要单独提问
-
@WDC:我已经在答案中回答了你的扩展问题
-
@Inian 对我来说是完美的工作,我只需要知道“”有什么问题