如何为awk添加回声?

时间:2017-12-17 02:41:01

标签: linux bash awk command

我的bash shell脚本遇到了一些麻烦,我用它来打印ls -l命令的第6和第10个字段。它按原样工作,但我不确定如何在它的末尾添加回声。它以字节为单位打印文件名和大小,但我想知道是否可以在每行末尾说“BYTES”,以明确文件大小的单位。

到目前为止我已经

/bin/ls -ls "$directory" | awk '{print $10,$6}'

这显然不是整个代码,而是唯一与我的问题相关的东西。我是否需要为变量分配回声然后添加它?我是bash shell脚本的新手,所以如果我的问题不好,我很抱歉。

编辑: 如果我使用这样的命令

wastesizeandlist ~/dev

我得到的输出是

This directory exists
Performing command
wastesizeandlist 520

我在剧本中添加了“BYTES”,就像有人建议的那样(道歉忘了你的名字,我现在看不到它)。现在的输出是

This directory exists
Performing command
  BYTES
wastesizeandlist 520 BYTES

几乎就在那里。除了BYTES下的表演命令回音。 我试图让它看起来像这样

This directory exists
Performing command
wastesizeandlist 520 BYTES

我知道我们不应该解析ls的输出,但我有一个赋值,它要求我获取目录中所有文件的文件大小和名称。如果有更好的方法,如果你能告诉我,我们将不胜感激。

编辑: 如果我尝试-lsR,我会得到这样的输出

Filename:     Size:  BYTES
Filename: wastesizeandlist   Size: 520 BYTES
Filename: test     Size: 4096 BYTES
Filename:        Size:  BYTES
Filename:        Size:  BYTES
Filename:        Size:  BYTES
Filename: 1      Size: 5 BYTES

此处test是子目录,1是该子目录中的文件。我现在要问的是如何删除出现在开头的行以及出现在新目录之前的行?我在另一个目录上尝试了该命令,它有同样的问题。一个看似无名且无大小的文件在开始时然后在进入子目录后3?所有的帮助将不胜感激。

编辑:

刚刚将尾部-n +2更改为+3并删除了第一行。如何删除其他空行并将输出放入适当的间隔列?

2 个答案:

答案 0 :(得分:2)

您可以使用ls之类的内容删除awk输出中 componentDidMount() { // if redux persist is not active fire startup action if (!ReduxPersist.active) { this.props.startup() } // ********* Add a listener from the database to monitor whos logged in. ********* firebase.auth().onAuthStateChanged((user) => { // ********* If a user is logged in firebase will return the user object. THEY ARE NOT LOGGED IN THOUGH ********* if (user) { console.log('onAuthStateChanged', user) // ********* Then we call an official Firebase login function through actions ********* this.props.loginRequest(user); } else { console.log('No user signed in') } }); // ********* After logging in the found user from above we need to set them to redux store ********* let signedInUser = firebase.auth().currentUser; if (signedInUser) { this.props.loginRequest(signedInUser); console.log('currentUserSignedIn', signedInUser) } else { console.log('no active user', signedInUser) } 命令无法正确解析的第一行。

答案 1 :(得分:0)

@Lenik

根据您的问题:

引用:

..............我有一项任务,要求我获取目录中所有文件的文件大小和名称。 如果有更好的方法,如果你能告诉我,我们将不胜感激。

结束报价

这样,您可以使用“du”而不是“ls”作为第一列,以“人类可读的格式”获取目录中的文件大小。第二列是文件名(根据需要迭代$ dir_to_check变量)

dir_to_check="./testKalin/" ; for file in `find ${dir_to_check} -type f` ; do du -h ${file} ; done

10M ./testKalin/10

9.0M ./testKalin/9

8.0M ./testKalin/8

7.0M ./testKalin/7

6.0M ./testKalin/6

5.0M ./testKalin/5

4.0M ./testKalin/4

3.0M ./testKalin/3

2.0M ./testKalin/2

1.0M ./testKalin/1

示例:

for dir in ./testKalin ./testKalin2 ; do dir_to_check=${dir} ; for file in `find ${dir_to_check} -type f` ; do du -h ${file} ; done ; done

10M ./testKalin/10

9.0M ./testKalin/9

8.0M ./testKalin/8

7.0M ./testKalin/7

6.0M ./testKalin/6

5.0M ./testKalin/5

4.0M ./testKalin/4

3.0M ./testKalin/3

2.0M ./testKalin/2

1.0M ./testKalin/1

10M ./testKalin2/10

9.0M ./testKalin2/9

8.0M ./testKalin2/8

7.0M ./testKalin2/7

6.0M ./testKalin2/6

5.0M ./testKalin2/5

4.0M ./testKalin2/4

3.0M ./testKalin2/3

2.0M ./testKalin2/2

1.0M ./testKalin2/1