我尝试不使用循环就从文件中检索一行。
myFile.txt
val1;a;b;c
val2;b;d;e
val3;c;r;f
我想获得第二列为b
的那一行。
如果我执行grep "b" myFile.txt
,则将输出第一行和第二行。
如果我执行cat myFile.txt | cut -d ';' -f2 | grep "b"
,则输出将仅为b
,而我想获得整行val2;b;d;e
。
是否有一种无需使用以下循环即可达到预期结果的方法?我的文件很大,不能一次又一次地循环遍历它。
while read line; do
if [ `echo $line | cut -d ';' -f2` = "b" ]; then
echo $line
fi
done < myFile.txt
答案 0 :(得分:2)
给出您的输入文件,以下一线应该可以工作:
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgba(255,99,132,1)',
borderWidth: 1
}, {
label: '# of Votes1',
data: [17, 9, 13, 9, 20, 13],
backgroundColor: 'rgba(54, 162, 235, 0.2)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}, {
label: '# of Votes2',
data: [1, 6, 13, 12, 20, 5],
backgroundColor: 'rgba(255, 206, 86, 0.2)',
borderColor: 'rgba(255, 206, 86, 1)',
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
function copyChart() {
Chart.helpers.each(Chart.instances, function(instance) {
var ctxCopy = document.getElementById("myChartCopy").getContext('2d');
new Chart(ctxCopy, instance.config);
});
}
说明:
awk -F";" '$2 == "b" {print}' myFile.txt
答案 1 :(得分:0)
使用:
grep
:
grep '^[^;]*;b;' myFile.txt
sed
:
sed '/^[^;]*;b;/!d' myFile.txt
两者的输出相同:
val2;b;d;e