我正在逐行读取文件(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与计数器进行比较,但是脚本在找到第一个之后就停止了。
答案 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)