小编VIP*_*MAR的帖子

如何在bash中使用多个参数并将它们传递给awk?

我正在编写一个函数,我在其中替换列中的前导/尾随空格,如果列中没有值,则将其替换为null.函数适用于一列,但我如何修改多列.

功能:

#cat trimfunction
#!/bin/bash
function trim
{
vCol=$1                                                    ###input column name
vFile=$2                                                   ###input file name
var3=/home/vipin/temp                                      ###temp file
awk -v col="${vCol}" -f /home/vipin/colf.awk ${vFile} > $var3 ###operation
mv -f $var3 $vFile                                         ###Forcefully mv
}
Run Code Online (Sandbox Code Playgroud)

AWK脚本:

#cat colf.awk
#!/bin/awk -f
BEGIN{FS=OFS="|"}{
  gsub(/^[ \t]+|[ \t]+$/, "", $col)                        ###replace space from 2nd column
}
{if ($col=="") {print $1,"NULL",$3} else print $0}         ###replace whitespace with NULL
Run Code Online (Sandbox Code Playgroud)

输入文件:第二列中的前导/尾随/空格

#cat filename.txt
1| 2016-01|00000321|12
2|2016-02 |000000432|13
3|2017-03 |000004312|54
4|  |000005|32
5|2017-05|00000543|12
Run Code Online (Sandbox Code Playgroud)

脚本:

#cat script.sh

    . /home/vipin/trimfunction …
Run Code Online (Sandbox Code Playgroud)

unix bash awk arguments function

5
推荐指数
1
解决办法
368
查看次数

如何在awk中手动设置记录分隔符?

我有一个如下文件 -

vipin kumar ........................ kumar ......bangalore
    something something .......
;
vipin kumar ........................ kumar ......bangalore
    something something .......(testing
)
;
vipin kumar ......................... kumar .....bangalore
something something ;
Run Code Online (Sandbox Code Playgroud)

我想要输出如下(名称和数字可以在文件中不同但唯一的共同点 - 当我们有";"时行结束)

vipin kumar ........................ kumar ......bangalore   something something .......;
vipin kumar ........................ kumar ......bangalore    something something .......(testing);
vipin kumar ......................... kumar .....bangaloresomething something ;

I want to set the RS to ";" . 
Run Code Online (Sandbox Code Playgroud)

我试过下面的命令 -

awk '{ORS=(NR%2==0?RS:FS)}1' file.txt
Run Code Online (Sandbox Code Playgroud)

但它没有提供正确的输出,因为

NR%2 or NR%3 不会工作,因为我不确定我会得到多少行 ;

然后我试着将RS设置为; 使用下面

awk '{for(i=1;i<=NF;i++) (ORS=(if($i …
Run Code Online (Sandbox Code Playgroud)

awk

4
推荐指数
1
解决办法
132
查看次数

0
推荐指数
1
解决办法
60
查看次数

标签 统计

awk ×3

arguments ×1

bash ×1

function ×1

unix ×1