awk单独列输出

时间:2017-11-20 16:52:26

标签: bash awk

我想要做的是使用awk从一列文件创建一个表(最多= 4行)。 我有一个文件:

1 a,b
2 r,i
3 w
4 r,t
5 o,s
6 y

欲望输出:

1 a,b   5 o,s
2 r,i   6 y
3 w
4 r,t

到目前为止,我只是将行分成不同的文件并且"粘贴"他们合而为一。我会欣赏任何更复杂的方法。

5 个答案:

答案 0 :(得分:3)

[14:12:36] Size main.css : 1234 B [14:12:36] Size main.css.map : 1234 B 与联接行和awk组合在一起以完美打印它们:

column

输出:

awk -v max=4 '
    { i = (NR-1) % max + 1; line[i] = line[i] "\t" $0 }
    END { for(i=1; i<=max && i<=length(line); i++) print line[i] }' file | column -t -s $'\t'

答案 1 :(得分:3)

$ cat tst.awk
BEGIN {
    numRows = 4
    OFS = "\t"
}
{
    rowNr = (NR - 1 ) % numRows + 1
    if ( rowNr == 1 ) {
        numCols++
    }
    val[rowNr,numCols] = $0
}
END {
    for (rowNr=1; rowNr<=numRows; rowNr++) {
        for (colNr=1; colNr<=numCols; colNr++) {
            printf "%s%s", val[rowNr,colNr], (colNr<numCols ? OFS : ORS)
        }
    }
}
$
$ awk -f tst.awk file
1 a,b   5 o,s
2 r,i   6 y
3 w
4 r,t

答案 2 :(得分:1)

另:

$ awk ' {
    i=(NR%4)                         # using modulo indexed array 
    a[i]=a[i] (a[i]==""?"":"  ") $0  # append to it
}
END {                                # in the END 
    for(i=1;i<=4;i++)                # loop all indexes in order
        print a[i%4]                 # dont forget the modulo
}' file
1 a,b  5 o,s
2 r,i  6 y
3 w
4 r,t

如果缺少列,自然会很难看。

答案 3 :(得分:1)

这是另一种awk方法: -

public ActionResult Edit(Preference preference)
{
    var user = User.Identity.Name;
    var userId = (from ui in db.Profiles where user == ui.someUser select ui.Id).SingleOrDefault();
    var result = (from r in db.Preferences where userId == r.UserId select r).SingleOrDefault();
    var id = result.UserId;
    var myPreferences = db.Preferences.SingleOrDefault(am => am.UserId == id);
    if (TryUpdateModel(myPreferences))
    {
        db.SaveChanges();
        return View(preference);
    }
    return View(preference);
}

答案 4 :(得分:1)

你可以结合分割和粘贴

split -l 4 file part- && paste part-*
  • -l <number>表示将文件拆分为每个<number>行的较小文件。
  • part-是我们选择用于新文件的前缀。请注意,它们将按字母顺序排列,例如part-aapart-ab等。因此paste会按预期粘贴它们。