gpt4 book ai didi

linux - 使用 bash 以特定方式输出文本文件的值?

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:56 25 4
gpt4 key购买 nike

我正在尝试使用 bash 从文本文件中查找某些特定值(例如 1 或 4)。如果在文件中找到这个值,那么我想调用一个函数并将找到的值作为参数传递给它。如果在某个列(例如 Col3)下找到值(1 或 4),那么我想调用另一个函数。

我遇到的问题是代码无法识别找到的值来自 Col3 并调用一个单独的函数。这是因为我跳过了前两行,所以我无法跟踪哪个值在哪一列下。

文件.txt :

Name  Col1  Col2  Col3  
-----------------------
row1 1 4 1
row2 2 5 2
row3 3 6 3

请注意,我在搜索文件时跳过了文本文件的前两行。另请注意,此代码是我所拥有的代码的虚拟版本,因为我只需要有关如何处理此代码的一般想法。

function retrieve {
if [[ "$1" == "1" ]]; then
var="one beer on the wall"
elif [[ "$1" == "4" ]]; then
var="four beers on the wall"
fi
}

function retrieve2 {
if [[ "$1" == "1" ]]; then
var="22 beers on the wall"
elif [[ "$1" == "4" ]]; then
var="44 beers on the wall"
fi
}

tail -n +3 $PWD/file.txt | while read -r ignored c1: do
echo "$c1"
done | while read -r value; do

if [[ //need to check if the value is under Col3 here// ]]; then
retrieve2 $value
else
retrieve1 $value
fi
echo $var
done

最佳答案

如果我对问题的理解正确,我们可以将每一行读入一个数组,然后对其进行迭代。如果该字段匹配 $val,那么如果我们在 $col 列中,我们调用 retrieve2,如果我们不在 $ 列中col 我们调用 retrieve1。这是它的草图。

#!/bin/bash
val=1
col=3
while read -ra cols
do
for ((i=1; i<${#cols[@]}; i++))
do
if (( cols[i] == val ))
then
if (( i == col ))
then
retrieve2
else
retrieve1
fi
fi
done
done < <(tail -n +3 file)

请注意,这假设值是数字,如果不是,请将条件 (( cols[i] == val )) 更改为 [[ ${cols[$i] } == "$val"]]

但是,由于它有点麻烦,最好将您的函数从 bash 重组为 awk,然后在 awk 中完成整个处理,如果这有意义的话。

关于linux - 使用 bash 以特定方式输出文本文件的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892235/

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