Shell脚本 - 在文件中当前行的X列中提取数字

时间:2015-10-13 12:12:30

标签: shell unix awk

我正在逐行读取文件(test.log.csv),直到文件结束,我想在当前行的第4列读取值,然后将值输出到文本文件。 (output.txt)

例如,现在我读到第2行(INSERT,SLT_TEST_1,TEST,1127192896,0,DEBUG1)并且我想在当前行的第4列中提取数字并输出到名为output的文本文件。 TXT。

test.log.csv

INSERT,SLT_TEST_1,TEST,1127192896,0,DEBUG1
INSERT,SLT_TEST_1,TEST,1127192896,0,DEBUG1
INSERT,SLT_TEST_1,TEST,1127192896,0,DEBUG1

所需的输出是

output.txt的

1127192896
1127192896
1127192896

现在我的脚本如下

#! /bin/bash
clear
rm /home/mobaxterm/Script/output.txt

while IFS= read -r line
do 
if [[ $line == *"INSERT"* ]] && [[ $line == *"$1"* ]]
then
    echo $line >> /home/mobaxterm/Script/output.txt
    lastID=$(awk -F "," '{if (NR==curLine) { print $4 }}' curLine="${lineCount}")
    echo $lastID
else
    if [ lastID == "$1" ]
    then
        echo $line >> /home/mobaxterm/Script/output.txt
    fi
fi
lineCount=$(($lineCount+1))
done < "/home/mobaxterm/Script/test.log.csv"

参数($ 1)将为1127192896

我尝试在循环中声明一个计数器并将NR与计数器进行比较,但是脚本在找到第一个之后就停止了。

2 个答案:

答案 0 :(得分:1)

找到第4个字段为1127192896的所有行,并输出第4个字段:

awk -F, -v SEARCH="1127192896" '$4 ~ SEARCH {print $4}' test.log.csv

1127192896
1127192896
1127192896

查找包含单词“INSERT”的所有行以及第4个字段的位置是1127192896

awk -F, -v SEARCH="1127192896" '$4 ~ SEARCH && /INSERT/ {print $4}' test.log.csv

如果您要在名为$1的变量中找到要查找的数字,请将其替换为1127192896,如下所示:

awk -F, -v SEARCH="$1" '$4 ~ SEARCH && /INSERT/ {print $4}' test.log.csv

答案 1 :(得分:0)

您可以组合变量替换和数组定义。

array_variable=( ${line//,/ /} )
sth_you_need=${array_variable[1]}

或者您可以使用awk / cut

sth_you_need=$(echo $line | awk -F, 'NR==2{print $2}')
# or
sth_you_need=$(echo $line | cut -d, -f2)