Awk 如何在一个专栏上grep?(垂直扫描而不是水平扫描)
假设我有一系列没有特定顺序的值:Awk 如何在一个专栏上grep?(垂直扫描而不是水平扫描),awk,grep,Awk,Grep,假设我有一系列没有特定顺序的值: Metric1 Metric3 Metric4 Metric5 Metric9 Metric8 Value1 Value3 Value4 Value5 Value9 Value8 对Metric5进行grep并写出该专栏的最佳方式是什么 比如说 grep Metric5 <file> 编辑:回想起来,这就是Python Pandas和csvcut似乎更高效的地方 Python路由: import pandas as pd df =
Metric1 Metric3 Metric4 Metric5 Metric9 Metric8
Value1 Value3 Value4 Value5 Value9 Value8
对Metric5进行grep并写出该专栏的最佳方式是什么
比如说
grep Metric5 <file>
编辑:回想起来,这就是Python Pandas和csvcut似乎更高效的地方
Python路由:
import pandas as pd
df = pd.read_csv('data.txt', header = None)
df[['metric5', 'metric5']]
csvcut:
资料
命令:
$ cat test-cols.dat | tr -s ' ' ',' | csvcut -c id,age | tr ',' ' ' | column -t
id age
1 50
2 70
$cat>foo.awk
{
对于(i=1;i$cat>foo.awk
{
对于(i=1;i一般而言:
awk -v colNames="Metric5 Metric1 Metric9" '
BEGIN { split(colNames,tmp); for (i in tmp) tgts[tmp[i]] }
NR==1 {
for (i=1; i<=NF; i++) {
if ($i in tgts) {
fldNrs[++numTgts] = i
}
}
}
{
for (tgtNr=1; tgtNr<=numTgts; tgtNr++) {
printf "%s%s", $(fldNrs[tgtNr]), (tgtNr<numTgts ? OFS : ORS)
}
}
' file
Metric1 Metric5 Metric9
Value1 Value5 Value9
awk-v colNames=“Metric5 Metric1 Metric9”
开始{split(colNames,tmp);for(tmp中的i)tgts[tmp[i]}
NR==1{
对于(i=1;i一般而言:
awk -v colNames="Metric5 Metric1 Metric9" '
BEGIN { split(colNames,tmp); for (i in tmp) tgts[tmp[i]] }
NR==1 {
for (i=1; i<=NF; i++) {
if ($i in tgts) {
fldNrs[++numTgts] = i
}
}
}
{
for (tgtNr=1; tgtNr<=numTgts; tgtNr++) {
printf "%s%s", $(fldNrs[tgtNr]), (tgtNr<numTgts ? OFS : ORS)
}
}
' file
Metric1 Metric5 Metric9
Value1 Value5 Value9
awk-v colNames=“Metric5 Metric1 Metric9”
开始{split(colNames,tmp);for(tmp中的i)tgts[tmp[i]}
NR==1{
对于(i=1;我应该grep Value3
返回什么?应该grep Value3
返回什么?哦,哇,甚至没有想到多个匹配项。然后再次强调,foo
在我的解决方案中非常强大,似乎是这样。哦,哇,甚至没有想到多个匹配项。然后,foo
在我的解决方案中也非常强大,似乎是这样。
$ cat > foo.awk
{
for(i=1;i<=NF;i++) {
a[i][NR]=$i
if(foo==$i)
it=i
} nr=NR
} END {
if(it!="")
for(i=1;i<=nr;i++)
print a[it][i]
}
$ awk -v foo="Metric5" -f foo.awk foo
Metric5
Value5
awk -v colNames="Metric5 Metric1 Metric9" '
BEGIN { split(colNames,tmp); for (i in tmp) tgts[tmp[i]] }
NR==1 {
for (i=1; i<=NF; i++) {
if ($i in tgts) {
fldNrs[++numTgts] = i
}
}
}
{
for (tgtNr=1; tgtNr<=numTgts; tgtNr++) {
printf "%s%s", $(fldNrs[tgtNr]), (tgtNr<numTgts ? OFS : ORS)
}
}
' file
Metric1 Metric5 Metric9
Value1 Value5 Value9