假设我有一个包含4列的文本文件,我必须剪切每一列并将其保存到另一个文本文件中。我可以通过以下Linux命令手动执行此操作,但是我想使用bash脚本自动执行此过程。有人可以帮我吗
cut textfile.txt | cut -d ":" -f1 > output1.txt
cut textfile.txt | cut -d ":" -f2 > output2.txt
cut textfile.txt | cut -d ":" -f3 > output3.txt
cut textfile.txt | cut -d ":" -f4 > output4.txt
Textfile.txt
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
col 1应该存储在output1.txt
text1;
text1;
text1;
text1;
text1;
text1;
col 2应该存储在output2.txt中
text2;
text2;
text2;
text2;
text2;
text2;
col 3应该存储在output3.txt中
text3;
text3;
text3;
text3;
text3;
text3;
col 4应该存储在output4.txt中
text4;
text4;
text4;
text4;
text4;
text4;
答案 0 :(得分:1)
这个awk单行代码适用于给定的示例输入:
awk -F':' '{for(i=1;i<=NF;i++)print $i>"output"i".txt"}' file
执行此命令后,将得到output1-4.txt作为结果。
OP评论:
列数不固定
如果输入文件有很多列,则需要关闭文件并将文本附加到文件中:
awk -F':' '{for(i=1;i<=NF;i++){f="output"i".txt;print $i>>f;close(f)}' file
答案 1 :(得分:1)
给出:
pub trait Point<I: PartialEq> {
fn id(&self) -> I;
}
pub struct Connection<T> {
pub to: T
}
impl<T> Connection<T> {
pub fn is_connected_to<I: PartialEq>(&self, point: T) -> bool
where
T: Point<I>
{
self.to.id() == point.id()
}
}
pub fn main() {
struct SimplePoint;
impl Point<char> for SimplePoint{
fn id(&self) -> char { return 'A' }
}
let a = SimplePoint {};
let conn = Connection {
to: a
};
}
您可以使用$ cat file
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
"text1":"text2":"text3":"text4"
将其转换为列:
awk
您可以删除引号并在$ awk -F: '{for (i=1;i<=NF;i++) print $i>"file" i ".txt"}' file
中添加以下内容:
;
结果:
awk -F: '{for (i=1;i<=NF;i++) {
gsub(/"/,"",$i)
print $i ";">"file" i ".txt"}}' file