gpt4 book ai didi

linux - 在 awk 中使用 if block

转载 作者:行者123 更新时间:2023-12-05 08:29:47 25 4
gpt4 key购买 nike

我正在用 awk 处理一个文件。

我想传递文件中第 25 到 34 列位置有空白的行,我想处理第 10 到 19 列位置有空白的行。具体来说,我想用 0 替换列位置 10 到 19 中的空白。这样,输出文件将保留 25-34 中带有空白的原始行。并且 10-19 中带有空白的行已被替换为“0”。因此输出文件将与输入文件相同,只是在位置 10-19 的相关行中有零。该文件如下所示:

###########################################
######### ########################
###########################################
###########################################
###########################################
###########################################
###########################################
###########################################
######### ##### #########
###########################################
###########################################
###########################################

我知道我必须使用 if block ,但我以前从未在 awk 中使用过。下面的语法是我认为我需要的,但请帮助我了解细节。特别是我用来在 if 语句中指定“空白”的内容。

我提前为错误的语法道歉。这是我第一次在 awk 中使用 If block 。我知道语法不起作用,这是我发布此内容的原因之一。

cat scr2 | awk 'BEGIN {
pos1=substr($0,25,10);
pos2=substr($0,10,10);

if (pos1 = ^[[:blank:]]$)
printf $0
else if (pos2 == ^[[:blank:]]$)
{val=substr($0,25,10)}
gsub(/ /,0,val){$0=substr($0,1,24) val substr($0,35)} 1}'`

示例输出将是:

###########################################
#########0000000000########################
###########################################
###########################################
###########################################
###########################################
###########################################
###########################################
######### ##### #########
###########################################
###########################################
###########################################

因此仅在第 10-19 位有空格的行被更改,而在 10-19 和 25-34 处都有空格的行被保留。

最佳答案

使用您展示的 sample ,请尝试关注 awk代码,在 GNU 中编写和测试 awk , 应该适用于任何 awk .

awk '
substr($0,10,10) ~ /^ +$/ && substr($0,20) !~ / / {
$0=substr($0,1,9) "0000000000" substr($0,20)
}
1
' Input_file

解释: 简单的解释就是,在 awk 的主程序中检查 2 个条件.第 1 确保第 10 到第 20 位置仅包含空格,并且第 2 行的其余值中没有空格,如果是这种情况,则输入零代替空格并打印编辑/未编辑的行。

关于linux - 在 awk 中使用 if block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68397846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com