Shell脚本剪切了特定的行和特定字段

时间:2017-01-16 19:08:40

标签: shell cut

echo "./Desktop/data.txt"| cut -f 1 -d ":"

以上行使用分隔符“:”

剪切特定字段

但是,如果我的文件包含多行,我怎么能用分隔符“:”来剪切特定行和特定字段?

3 个答案:

答案 0 :(得分:3)

这是AWK的理想任务:

var addUp = function(counterId) {
  var count = 0;

  return function () {
     var counterEle = document.getElementById(counterId);
     if (counterEle)
        counterEle.innerHTML = "Picture Clicks: " + ++count;
  }
};

var catImage = document.getElementById("cat-image");
catImage.addEventListener("click", addUp("cat-counter-id"), false);
  • awk -F: 'NR == 2 {print $2}' "./Desktop/data.txt" 将字段分隔符设置为-F:
  • :是一种模式,意思是“记录(行号)等于2”
  • NR == 2是在模式匹配上执行的操作,意思是“打印第二个字段”

答案 1 :(得分:2)

我将使用

模拟data.txt文件
datatxt="Line 1 without colon
I want this:the part before the colon
nope, not me
other line with colon:that can be found"

您的命令显示所有行的第一个字段

echo "${datatxt}" | cut -f 1 -d ":"
Line 1 without colon
I want this
nope, not me
other line with colon

首次使用:时,您可以获得grep行:

echo "${datatxt}" | grep ":" | cut -f 1 -d ":"
I want this
other line with colon

您可以为一行输出附加| head -1 这些说明也可以使用sed完成。 使用sed,您可以删除冒号后的所有内容:

echo "${datatxt}" | sed 's/:.*//'
Line 1 without colon
I want this
nope, not me
other line with colon

sed中添加grep可以通过查找/:/的行来完成 您应该将其与-np结合使用。

echo "${datatxt}" | sed -n '/:/ s/:.*//p'
I want this
other line with colon

如果需要一行输出,可以使用

echo "${datatxt}" | sed -n '/:/ s/:.*//p' | sed -n '1p'
# OR SHORTER
echo "${datatxt}" | sed -n '/:/ {s/:.*//p;q}'

答案 2 :(得分:1)

如果您选择基于行号的行,则可以使用sed。例如,对于第10行,请执行:

cat "./Desktop/data.txt"| cut -f 1 -d ":" | sed -n 10p
  • -n告诉sed默认不打印行
  • 10p告诉sed何时到达第10行,它应该打印。

如果你需要根据包含特定值的那一行选择一行,那么我会使用grep。如果该值与您正在切割的列不在一列,则请确保在切割之前进行grep。

注意:原帖上写着“./Desktop/data.txt”,我假设那应该是cat,而不是echo。